package projectisd.server;

import projectisd.client.InschrijvenVak;

import java.util.List;

import javax.jdo.PersistenceManager;
import projectisd.server.PmfSingleton;


/** 
 * In deze klas word gezorgd dat Inschrijven vak Persistent wordt opgeslagen verwijderd
 * en geupdated wordt
 * @author Team 2
 * @version 7.0
 */

public class InschrijvenVakDAOJdo implements InschrijvenVakDAO {
	
	/** 
	 * In deze methode wordtInschrijven vak peristent toegevoegd aan 
	 * de dtabase
	 *@addInschrijvenVak
	 */

	public void addInschrijvenVak(InschrijvenVak inschrijvenVak) {
		PersistenceManager pm = PmfSingleton.get().getPersistenceManager();
		try {
			pm.makePersistent(inschrijvenVak);
		} finally {
			pm.close();
		}
	}
	
	/** 
	 * In deze methode wordt een naam geselecteerd uit de lijst van InschrijvenVakken 
	 *@return (List<InschrijvenVak>) pm.newQuery(query).execute();
	 */

	@SuppressWarnings("unchecked")
	public List<InschrijvenVak> listInschrijvenVakken() {
		PersistenceManager pm = PmfSingleton.get().getPersistenceManager();
		String query = "select from " + InschrijvenVak.class.getName();
		return (List<InschrijvenVak>) pm.newQuery(query).execute();
	}
	
	/** 
	 * Deze methode zorgt er voor dat de gegevens die persistent zijn opgeslagen
	 * ook peristent worden verwijderd
	 */

	public void removeInschrijvenVak(InschrijvenVak inschrijvenVak) {
		PersistenceManager pm =PmfSingleton.get().getPersistenceManager();
		try {
			pm.currentTransaction().begin();

			// We don't have a reference to the selected Object.
			// So we have to look it up first,
			inschrijvenVak = pm.getObjectById(InschrijvenVak.class, inschrijvenVak.getInschrijvenVakNr());
			pm.deletePersistent(inschrijvenVak);

			pm.currentTransaction().commit();
		} catch (Exception ex) {
			pm.currentTransaction().rollback();
			throw new RuntimeException(ex);
		} finally {
			pm.close();
		}
	}
	
	/** 
	 * Deze methode zorgt er voor dat de gegevens die persistent zijn opgeslagen
	 * ook peristent worden geupdated
	 */

	public void updateInschrijvenVak(InschrijvenVak inschrijvenVak) {
		PersistenceManager pm = PmfSingleton.get().getPersistenceManager();
		
		String nummer = inschrijvenVak.getStudentnummer();
		Long vakNr = inschrijvenVak.getVakNr();
		
		try {
			pm.currentTransaction().begin();
			// We don't have a reference to the selected Product.
			// So we have to look it up first,
			inschrijvenVak = pm.getObjectById(InschrijvenVak.class, inschrijvenVak.getInschrijvenVakNr());			
			inschrijvenVak.setStudentnummer(nummer);
			inschrijvenVak.setVakNr(vakNr);
			pm.makePersistent(inschrijvenVak);
			pm.currentTransaction().commit();
		} catch (Exception ex) {
			pm.currentTransaction().rollback();
			throw new RuntimeException(ex);
		} finally {
			pm.close();
		}
	}

}
